package com.solo.system.mapper;

import com.mybatisflex.core.query.QueryChain;
import com.mybatisflex.core.query.QueryMethods;
import com.mybatisflex.core.update.UpdateChain;
import com.solo.common.core.base.mapper.BasicMapper;
import com.solo.system.api.entity.SysI18nTypeData;
import com.solo.system.api.entity.table.SysI18nTypeDataTableDef;
import com.solo.system.api.entity.table.SysI18nTypeTableDef;
import com.solo.system.model.i18n.type.resp.I18nTypeDataListSimpleAllResp;
import com.solo.system.model.i18n.type.resp.I18nTypeDataListSimpleResp;
import org.apache.ibatis.annotations.Mapper;

import java.util.Collection;
import java.util.List;

import static com.mybatisflex.core.query.QueryMethods.select;
import static com.solo.system.api.entity.table.SysI18nDataTableDef.SysI18nDataTable;
import static com.solo.system.api.entity.table.SysI18nTypeDataTableDef.SysI18nTypeDataTable;
import static com.solo.system.api.entity.table.SysI18nTypeTableDef.SysI18nTypeTable;

/**
 * 国际化语言类型数据关联 Mapper
 * @author 十一
 * @since 2024-10-25 14:19
 * 人生若只如初见，何事秋风悲画扇
 **/
@Mapper
public interface SysI18nTypeDataMapper extends BasicMapper<SysI18nTypeData> {

    /**
     * 按数据id集合批量删除国际化语言类型数据关联
     * @param dataIds 数据id集合
     * @return boolean
     */
    default boolean deleteByDataIds(Collection<Long> dataIds) {
        return UpdateChain.of(this)
                .where(SysI18nTypeDataTable.DataId.in(dataIds))
                .remove();
    }
    
    default List<I18nTypeDataListSimpleResp> listSimple(Long dataId) {
        SysI18nTypeDataTableDef td = SysI18nTypeDataTable.as("td");
        SysI18nTypeTableDef t = SysI18nTypeTable.as("t");
        return QueryChain.of(this)
                .select(t.TypeId,
                        t.Name,
                        t.Remark,
                        QueryMethods.column(
                                select(td.Translate)
                                        .from(td)
                                        .where(td.TypeId.eq(t.TypeId))
                                        .and(td.DataId.eq(dataId, true))
                        ).as(td.Translate.getName())
                ).from(t)
                .where(t.Status.eq(true))
                .listAs(I18nTypeDataListSimpleResp.class);
    }
    
    default List<I18nTypeDataListSimpleAllResp> listSimpleAll(String acceptLanguage) {
        return QueryChain.of(this)
                .select(SysI18nDataTable.Key, SysI18nTypeDataTable.Translate)
                .from(SysI18nTypeDataTable)
                .leftJoin(SysI18nTypeTable).on(SysI18nTypeDataTable.TypeId.eq(SysI18nTypeTable.TypeId))
                .leftJoin(SysI18nDataTable).on(SysI18nTypeDataTable.DataId.eq(SysI18nDataTable.DataId))
                .where(SysI18nTypeTable.Status.eq(true)
                        .and(SysI18nTypeTable.Name.eq(acceptLanguage)))
                .listAs(I18nTypeDataListSimpleAllResp.class);
    }

}
